#!/usr/bin/env python
# $Id: test2-25.py df54dec975f4 2012/09/09 20:22:40 pgurumur $
# Copyright (c) 2012 Prabhu Gurumurthy <pgurumur@gmail.com>
#
# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#

__version__  = "$Revision: df54dec975f4 $"
__author__   = "$Author: pgurumur $"
__modified__ = "$Date: 2012-09-09 20:22:40Z $"

class EnumType(object):
   def __init__(self, *args, **kwargs):
      self._enum = self.enum(*args, **kwargs)
      self.__temp = self._enum.__dict__
      self._count = len(args) + len(kwargs)

   def enum(self, *sequential, **named):
      enums = dict(zip(sequential, xrange(len(sequential))), **named)
      return type('Enum', (), enums)

   def __getattr__(self, name):
      retval = None
      if isinstance(name, (str, unicode)):
         if name in self:
            retval = self.__temp[name]

      return retval

   def __contains__(self, name):
      retval = False
      if name in self.__temp.keys():
         retval = True

      return retval

   def __len__(self):
      return self._count

   def __getitem__(self, Key):
      retval = None
      if isinstance(Key, (int, long)):
         for (key, value) in self.__temp.items():
            if isinstance(value, (int, long)) and value == Key:
               retval = key
               break
         
         retval = retval.encode('utf-8')
      elif isinstance(Key, (str, unicode)):
         retval = getattr(self, Key)

      return retval

test = EnumType('SHA', 'MD5', 'SHA256', SHA384 = -1)
if 'SHA384' in test:
   print test.SHA384

print(len(test))
print test[-1]
print test[1]
print test["SHA256"]
